home *** CD-ROM | disk | FTP | other *** search
/ The Fatted Calf / The Fatted Calf.iso / Applications / Games / Solitaire / Sources / Pyramid / WasteCardPileDelegate.m < prev   
Text File  |  1994-01-12  |  4KB  |  156 lines

  1. /* indent:4  tabsize:8  font:fixed-width */
  2.  
  3.  
  4. #import "WasteCardPileDelegate.h"
  5. #import "../Solitaire/CardSet.subproj/cardset.h"
  6. #import "Pyramid.h"
  7.  
  8. @implementation WasteCardPileDelegate
  9.  
  10. /*--------------------------------------------------------------------------
  11. |
  12. |    - setDiscardLeft:left discardRight:right
  13. |    returns: (id) self
  14. |
  15. |---------------------------------------------------------------------------
  16. |
  17. |    Set connections to other piles.
  18. |    
  19. \--------------------------------------------------------------------------*/
  20.  
  21. - setDiscardLeft:left discardRight:right
  22. {
  23.     discardCardPileViewL = left;
  24.     discardCardPileViewR = right;
  25.     return self;
  26. }
  27.  
  28.  
  29. /*--------------------------------------------------------------------------
  30. |
  31. |    - (BOOL)canAcceptPile:aCardPile from:sender in:wasteCardPileView
  32. |
  33. |    returns: (BOOL)    YES if this pile will accept the cards dropped on it
  34. |
  35. |         (BOOL)    NO if this pile will not accept the dropped cards
  36. |
  37. |---------------------------------------------------------------------------
  38. |
  39. |    Called by the WasteCardPileView when a card pile wants to be 
  40. |    dropped on this pile.
  41. |    
  42. \---------------------------------------------------------------------------*/
  43.  
  44. - (BOOL)canAcceptPile:aCardPile from:sender in:wasteCardPileView
  45. {
  46.     id card1 = [aCardPile cardAt:CS_TOP];
  47.     id card2 = [[wasteCardPileView cardPile] cardAt:CS_TOP];
  48.  
  49.     /*----------------------------------------------------------------------
  50.     |
  51.     |    If the card being dropped and the card on top of the
  52.     |    pile add to thirteen, allow the card to be dropped.
  53.     |    Both cards will be moved to the discardCardPiles in
  54.     |    the acceptPile delegate method.
  55.     |
  56.     \---------------------------------------------------------------------*/
  57.  
  58.     if (card1 && card2 && ([card1 value] + [card2 value] == 11))
  59.     {
  60.     return YES;
  61.     }
  62.     else
  63.     {
  64.         return NO;
  65.     }
  66. }
  67.  
  68.  
  69. /*---------------------------------------------------------------------------
  70. |
  71. |    - acceptPile:aCardPile in:wasteCardPileView
  72. |
  73. |    returns:        (id)        self
  74. |
  75. |----------------------------------------------------------------------------
  76. |
  77. |    Called by WasteCardPileView after cards have been successfully 
  78. |    added to the pile as a result of cards being dropped on it.
  79. |    
  80. \---------------------------------------------------------------------------*/
  81.  
  82. - acceptPile:aCardPile in:wasteCardPileView
  83. {
  84.     id leftDiscardPile = [discardCardPileViewL cardPile];
  85.     id rightDiscardPile = [discardCardPileViewR cardPile];
  86.     id pile = [wasteCardPileView cardPile];
  87.     id aCard;
  88.  
  89.     aCard = [pile cardAt:CS_TOP];
  90.     [pile removeCard:aCard];
  91.     [leftDiscardPile addCard:aCard];
  92.     aCard = [pile cardAt:CS_TOP];
  93.     [pile removeCard:aCard];
  94.     [rightDiscardPile addCard:aCard];
  95.  
  96.     [discardCardPileViewL display];
  97.     [discardCardPileViewR display];
  98.     [wasteCardPileView display];
  99.  
  100.     [SolGameController() checkForWin];
  101.     return self;
  102. }
  103.  
  104.  
  105. /*--------------------------------------------------------------------------
  106. |
  107. |    - (BOOL) draggedPile:aCardPile from:wasteCardPileView
  108. |
  109. |    returns:    (BOOL)    YES if it is legal to drag the card.
  110. |
  111. |            (BOOL)    NO if it is not legal to drag the card.
  112. |
  113. |---------------------------------------------------------------------------
  114. |
  115. |    Called by the wastePileCardView when the user tries to drag a card.
  116. |    
  117. \--------------------------------------------------------------------------*/
  118.  
  119. - (BOOL)draggedPile:aCardPile from:wasteCardPileView
  120. {
  121.     return YES;
  122. }
  123.  
  124.  
  125. /*--------------------------------------------------------------------------
  126. |
  127. |    doubleClickedCard:aCard in:aCardPileView
  128. |
  129. |    returns: (id) self
  130. |
  131. |---------------------------------------------------------------------------
  132. |
  133. |    Double clicked on a card; discard if it is a King.
  134. |    
  135. \--------------------------------------------------------------------------*/
  136.  
  137. - doubleClickedCard:aCard in:aCardPileView
  138. {
  139.     id cardPile = [aCardPileView cardPile];
  140.     
  141.     if (aCard && (aCard == [cardPile cardAt:CS_TOP]) && 
  142.                                                [aCard value] == CS_KING)
  143.     {
  144.         [[discardCardPileViewL cardPile] addCard:[cardPile cardAt:CS_TOP]];
  145.     [cardPile removeCard:[cardPile cardAt:CS_TOP]];
  146.     [aCardPileView display];
  147.     [discardCardPileViewL display];
  148.     [SolGameController() checkForWin];
  149.  
  150.     }
  151.     return self;
  152. }
  153.  
  154. @end
  155.